package com.softer.wxzj.service;

import com.github.pagehelper.PageInfo;
import com.softer.wxzj.common.entity.CommonResult;
import com.softer.wxzj.common.entity.Page;
import com.softer.wxzj.entity.BaseBuildModifyDetail;
import com.softer.wxzj.entity.BaseHouseInfo;
import com.softer.wxzj.entity.BaseModifyDetail;
import com.softer.wxzj.service.base.BaseService;

import java.util.List;

/**
 * @description:房屋信息
 * @ClassName: BaseHouseInfoService
 * @author: zcz
 * @date: 2019-05-20 16:33
 */
public interface BaseHouseInfoService extends BaseService<BaseHouseInfo> {
    /**
     * 查询房间名是否重复
     *
     * @param id
     * @param roomName
     * @return
     */
    int getRoomNameCountById(String id, String roomName);


    /**
     * 查询房屋维护列表的用的数据
     *
     * @param
     * @return
     */
    PageInfo<BaseHouseInfo> getHouseAndOwnerList(Page page, BaseHouseInfo baseHouseInfo);

    /**
     * 修改
     *
     * @param newBaseHouseInfo
     * @param modifyType
     * @return
     * @throws Exception
     */
    CommonResult updateToSave(List<BaseHouseInfo> newBaseHouseInfo, String modifyType, String modifyCause) throws Exception;

    /**
     * 获取房屋调换页面列表
     *
     * @param page          分页信息
     * @param baseHouseInfo 查询实体
     * @return 分页实体
     */
    PageInfo<BaseHouseInfo> getChangeHouseList(Page page, BaseHouseInfo baseHouseInfo);

    /**
     * 获取第二层房屋调换列表
     * 根据传入的房间ID，查询当前房间所在小区的所有房间
     *
     * @param page          分页信息
     * @param baseHouseInfo 查询实体
     * @return 分页实体
     */
    PageInfo<BaseHouseInfo> getSecondChangeHouseList(Page page, BaseHouseInfo baseHouseInfo);

    /**
     * 房屋调换
     *
     * @param beforeRoomId 更换前房间Id
     * @param afterRoomId  更换后房屋ID
     * @return 调换结果
     */
    CommonResult change(String beforeRoomId, String afterRoomId);

    /**
     * insertOrUpdate
     *
     * @param baseHouseInfoList
     * @return
     */
    CommonResult insertOrUpdate(List<BaseHouseInfo> baseHouseInfoList);

    /**
     * 查询所有列表，不分页
     *
     * @param baseHouseInfo
     * @return
     */
    List<BaseHouseInfo> getAllList(BaseHouseInfo baseHouseInfo);

    /**
     * 业主维护查询
     *
     * @param baseHouseInfo
     * @return
     */
    PageInfo<BaseHouseInfo> getListNotDep(Page page, BaseHouseInfo baseHouseInfo);

    /**
     * 房屋变更审核
     *
     * @param id
     * @param opinion
     * @param mark
     * @return
     */
    public CommonResult changeResidentialCommittee(String id, String opinion, String mark);


    /**
     * 房屋调换审核
     *
     * @param id      变化ID
     * @param opinion 审批意见
     * @param mark    审批通过 audit_pass
     *                审批否决 audit_veto
     *                审批退回 audit_back
     * @return 操作结果
     */
    CommonResult changeModifyAudit(String id, String opinion, String mark);

    /**
     * 查询房屋调换审核列表
     *
     * @param page                  分页信息
     * @param baseBuildModifyDetail 查询实体
     *                              oldAddress 房屋地址
     *                              createTime 申请开始时间
     *                              updateTime 申请结束时间
     *                              creater 申请人
     * @return 查询结果
     */
    PageInfo<BaseBuildModifyDetail> getChangeModifyList(Page page, BaseBuildModifyDetail baseBuildModifyDetail);

    /**
     * 查询房屋调换详情
     *
     * @param id 变更ID
     * @return 详情信息
     */
    BaseBuildModifyDetail getChangeDetail(String id);

    /**
     * 查询房屋调换查询列表
     *
     * @param page                  分页信息
     * @param baseBuildModifyDetail 查询实体
     *                              oldAddress 调换前房屋地址
     *                              newAddress 调换后房屋地址
     *                              createTime 申请开始时间
     *                              updateTime 申请结束时间
     *                              modifyCause 变更原因
     *                              creater 变更人
     * @return 查询结果
     */
    PageInfo<BaseBuildModifyDetail> getChangeModifyInfoList(Page page, BaseBuildModifyDetail baseBuildModifyDetail);

    /**
     * 模糊查询房屋调换变更列表
     *
     * @param page  分页实体
     * @param param 模糊查询参数
     * @return 房屋调换变更列表
     */
    PageInfo<BaseHouseInfo> fuzzySearch(Page page, String param);

    /**
     * 查询视图界面房屋列表,过滤掉已缴存或处于缴存中的数据
     *
     * @param baseHouseInfo
     * @return
     */
    List<BaseHouseInfo> getListToView(BaseHouseInfo baseHouseInfo);

    /**
     * 查询视图界面房屋列表,不过滤已缴存或处于缴存中的数据
     *
     * @param baseHouseInfo
     * @return
     */
    List<BaseHouseInfo> getAllListToView(BaseHouseInfo baseHouseInfo);

    /**
     * 查询视图界面房屋列表带分页
     *
     * @param baseHouseInfo
     * @return
     */
    PageInfo<BaseHouseInfo> getPageListToView(Page page, BaseHouseInfo baseHouseInfo);

    /**
     * 视图单元新增房屋
     *
     * @param baseHouseInfo
     * @return
     */
    CommonResult insertHouseByCell(BaseHouseInfo baseHouseInfo, String stepType);

    /**
     * 批量修改
     *
     * @param baseHouseInfoList
     * @return
     */
    CommonResult updateBatch(List<BaseHouseInfo> baseHouseInfoList);

    /**
     * 查询关联附房列表
     *
     * @param page
     * @param baseHouseInfo
     * @return
     */
    PageInfo<BaseHouseInfo> getBindSubHouseList(Page page, BaseHouseInfo baseHouseInfo);

    /**
     * 视图模块业主批量维护
     *
     * @param page
     * @param baseHouseInfo
     * @return
     */
    PageInfo<BaseHouseInfo> getOwnerListToView(Page page, BaseHouseInfo baseHouseInfo, String arcType);

    /**
     * 根据自然幢id 查询单元名列表
     *
     * @param buildNo
     * @return
     */
    List<String> getCellNameListByBuildNo(String buildNo);

    /**
     * 根据自然幢id 查询房屋性质列表
     *
     * @param buildNo
     * @return
     */
    List<String> getHouseUseListByBuildNo(String buildNo);

    /**
     * 批量删除  非公共接口
     *
     * @param idList
     * @return
     */
    CommonResult deleteBatchToView(String idList);

    /**
     * 根据楼层添加房间
     *
     * @param cellNo
     * @param houseNum
     * @param floorNo
     * @return
     */
    CommonResult insertByFloor(String cellNo, String houseNum, String floorNo);

    /**
     * 根据自然幢编号和楼层号查询可添加的单元列表  用于填充添加层界面下拉框
     *
     * @param floorNo
     * @param buildNo
     * @return
     */
    List<BaseHouseInfo> getCellByBuildNoAndFloorNoToInput(String floorNo, String buildNo);

    /**
     * 查询房屋业主列表，用在资金退款部分退款列表
     *
     * @param page
     * @param baseHouseInfo
     * @return
     */
    PageInfo<BaseHouseInfo> getHouseListToRef(Page page, BaseHouseInfo baseHouseInfo);

    /**
     * 房屋状态
     *
     * @param baseHouseInfo
     */
    void houseState(BaseHouseInfo baseHouseInfo);

    /**
     * 过户的房屋明细
     */
    BaseHouseInfo getHouseInfo(String houseId);

    /**
     * 查询批量退款列表
     *
     * @param
     * @return
     */
    PageInfo<BaseHouseInfo> getListToRef(Page page, String buildNo, String refType);

    /**
     * 根据小区ID查询房间列表
     *
     * @param regionId 小区ID
     * @param buildId  自然幢ID
     * @param cellId   单元ID
     * @return 房间列表
     */
    List<BaseHouseInfo> getHouseListByRegionId(String regionId, String buildId, String cellId);

    /**
     * 修改房屋变更
     *
     * @param page
     * @param id
     * @return
     */
    PageInfo<BaseModifyDetail> getModifyDetailList(Page page, String id);

    /**
     * 房屋结构变更base_house_update_structure
     *
     * @param baseHouseInfo
     * @return
     */
    CommonResult updateToSaveByHouse(List<BaseHouseInfo> baseHouseInfo) throws Exception;

    /**
     * 房屋结构变更审核
     *
     * @param id
     * @param opinion
     * @param mark
     * @return
     */
    CommonResult modifyAuditHouse(String id, String buildId, String opinion, String mark);

    /**
     * 房屋结构变更--房屋信息
     *
     * @param reqNo
     * @param cellId
     * @return
     */
    List<BaseHouseInfo> selectAllHouseAndChange(String reqNo, String cellId);

    /**
     * 直接删除业主和房屋
     *
     * @param hpuseId
     * @return
     */
    CommonResult delHouseAndOwner(String hpuseId);

    PageInfo<BaseHouseInfo> houseAndOwner(Page page, BaseHouseInfo baseHouseInfo);

    BaseHouseInfo selectHouseById(String id);

    BaseHouseInfo selectCountByBuildId(String buildNo);

    BaseHouseInfo selectCountByRegionNo(String regionNo);

    PageInfo<BaseHouseInfo> selectBydepReqList(Page page, String id);
}
